[AWS CDK] SSMのパラメータストアにあるStringとSecure StringをLambdaで使ってみた
SSM(Systems Manager)のパラメータストアでは、次の3種類をサポートしています。
- String
- String List
- Secure String
これらにSlackのWebhookURLなどを格納して、Lambdaで使うことがよくあります。(Git管理コードに含めたくない等)
そこで本記事では、下記についてAWS CDKを使ってやってみました!
- String
- Lambdaの環境変数に設定し、コードで参照する
- Secure String
- Lambdaのコード内でSSMから取得する
なお、Secure String
は、CloudFormation(やAWS SAM、AWS CDK)のLambdaは未サポートのため、コードでSSMから取得する必要があります。
(RDSのMasterUserPasswordなど、一部のみサポートされています)
環境
項目 | バージョン |
---|---|
macOS | Mojave 10.14.6 |
AWS CDK | 1.9.0 (build 30f158a) |
node | v10.16.1 |
npm | 6.9.0 |
SSMのパラメータストアにStringとSecure Stringを追加する
あらかじめ追加しておきます。
$ aws ssm put-parameter \ --type 'String' \ --name '/CDK/Sample/NormalParam1' \ --value 'this is normal param1.' { "Version": 1 }
$ aws ssm put-parameter \ --type 'SecureString' \ --name '/CDK/Sample/SecureParam1' \ --value 'this is secure param1.' { "Version": 1 }
AWS CDKプロジェクトの構築
$ mkdir AWSCDK-SSM-SecureStringSample $ cd AWSCDK-SSM-SecureStringSample $ cdk init app --language=typescript
必要なライブラリをインストールします。
$ npm install --save @aws-cdk/aws-apigateway $ npm install --save @aws-cdk/aws-lambda $ npm install --save @aws-cdk/aws-ssm $ npm install --save @aws-cdk/aws-iam $ npm install --save-dev aws-sdk
AWS CDKで適当にWebAPIを作る
Lambdaコードを書く
まずはファイルを作ります。
$ mkdir -p src/lambda/ $ touch src/lambda/app.ts
続いてコードを下記にします。
インフラをコードで書く!!!
続いてlib/awscdk-ssm-secure_string_sample-stack.ts
を下記にします。
ビルドする
npm run build
デプロイする
cdk deploy
動作確認
normal_param1
とsecure_param1
がバッチリ取得できました!
$ curl https://xxxxx.execute-api.ap-northeast-1.amazonaws.com/prod/abcd1234 { "normal_param1":"this is normal param1.", "secure_param1":"this is secure param1.", "message":"request id: abcd1234" }
AWSの様子
SSM(Systems Manager)
Lambda
さいごに
書く量は、CloudFormationとそんなに変わらないですが、デフォルト値の設定や取得できなかったとき、という部分をコードで書けるので楽になりそうな予感がしました。